﻿using System;
using System.Linq;
using System.Net.Mail;
using DAL.Models;
using DAL.BAL;

namespace WpfClient.Classes
{
    public class EmailMessage
    {
        private static string GetSubject(Candidate candidate)
        {
            return string.Format("Резюме от кадрового агентства «Досвід». {0}", candidate.LastName);
        }

        private static string GetSubjectForCandidate()
        {
            return string.Format("Запрошення на співбесіду від кадрового агентства «Досвід».");
        }

        private static string GetBody()
        {
            return string.Format(@"Доброго дня! 

Резюме в додатку. Повідомте, будь-ласка,  результат розгляду кандидата.

З повагою, менеджер по роботі з вакансіями.

067-341-47-33, 050-430-86-33");
        }

        private static string GetBodyForCandidate()
        {
            return string.Format(@"Шановний клієнт кадрового агентства «Досвід», Вас запрошує на співбесіду працедавець.
Інформація про працедавця та вакансію знаходиться у вкладеному файлі. Працедавець
вибрав Вашу кандидатуру, і чекає Вашого дзвінка.

- Прегляньте інформацію.

- Якщо вакансія Вам підходить, то зателефонуйте працедавцю.

- Після співбесіди зателефонуйте в агентство для обговорення подальших дій.

- Якщо вакансія не підходить, чи Ви не можете прийти на співбесіду, то проінформуйте
агентство листом або по телефону.
067-341-47-33 , 050-430-86-33 , 093-485-96-86

З повагою, Ірина Володимирівна, КА «Досвід»

067-341-47-33, 050-430-86-33");
        }

        private static string GetSubjectPhones(Candidate candidate)
        {
            return string.Format("Телефон {0}", candidate.LastName);
        }

        private static string GetBodyPhones(Candidate candidate)
        {
            string body = string.Empty;
             
            foreach (Candidat_Phones phone in candidate.Candidat_Phones.Where(n => n.Comment == string.Empty || n.Comment == null))
            {
                if (body == string.Empty)
                {
                    body += "Телефони: ";
                }

                body += string.Format("{0}; ", phone.Phone);
            }

            body += @"

При контакті з кандидатом  пошліться, будь-ласка, на наше кадрове агентство ""Досвід"" і повідомте результат співбесіди.";

            return body;
        }

        private static void AddRecipientsToMessage(MailMessage _message, DAL.Models.Candidate _candidate)
        {
            foreach (Candidat_EMails ce in _candidate.Candidat_EMails)
            {
                if (ce.EMail != string.Empty)
                    _message.To.Add(ce.EMail);
            }
        }
    
        public static MailMessage CreateMessage(Vacancy vacancy, Candidate candidate)
        {
            if ((Business.currentUser.EMail != null) && (Business.currentUser.EMail != string.Empty) &&
                (vacancy.Employer.Employer_ContactPersons.Count > 0))
            {
                MailMessage message = new MailMessage();

                message.From = new System.Net.Mail.MailAddress(Business.currentUser.EMail);

                message.Subject = GetSubject(candidate);

                message.Body = GetBody();

                #region Create recipients

                if (vacancy.Candidate != null)
                    AddRecipientsToMessage(message, vacancy.Candidate);

                if (vacancy.Candidate1 != null)
                    AddRecipientsToMessage(message, vacancy.Candidate1);

                #endregion

                if (message.To.Count > 0)
                {
                    #region Add attchment

                    string fileName = string.Empty;

                    if ((candidate.Candidate_Resume != null) && (candidate.ResumeName != null))
                    {
                        fileName = string.Format("{0}\\{1}", Environment.CurrentDirectory, candidate.ResumeName);

                        System.IO.File.WriteAllBytes(fileName, candidate.Candidate_Resume.FirstOrDefault().Resume);

                        //System.IO.StreamReader sr = new System.IO.StreamReader(fileName);

                        //System.IO.StreamWriter s = new System.IO.StreamWriter(fileName,Encoding.Unicode);



                        Attachment a = new Attachment(fileName);

                        // a.NameEncoding = Encoding.UTF32;

                        message.Attachments.Add(a);

                    }
                    #endregion

                    return message;
                }
                else
                    return null;

            }
            else
                return null;
           
        }

        public static MailMessage CreateMessageforCandidate(Vacancy vacancy, Candidate candidate)
        {
            if ((Business.currentUser.EMail != null) && (Business.currentUser.EMail != string.Empty))
            {
                MailMessage message = new MailMessage();

                message.From = new System.Net.Mail.MailAddress(Business.currentUser.EMail);

                message.Subject = GetSubjectForCandidate();

                message.Body = GetBodyForCandidate();

                #region Create recipients

                if (candidate.Candidat_EMails != null)
                    AddRecipientsToMessage(message, candidate);               

                #endregion

                if (message.To.Count > 0)
                {
                    #region Add attchment

                    string fileName = string.Empty;

                    if ((vacancy.ResumeName) != null)/*((candidate.Candidate_Resume != null) && (candidate.ResumeName != null))*/
                    {
                        fileName = string.Format("{0}\\{1}", Environment.CurrentDirectory, vacancy.ResumeName);

                        System.IO.File.WriteAllBytes(fileName,vacancy.Vacancy_Resume.FirstOrDefault().Resume);

                        //System.IO.StreamReader sr = new System.IO.StreamReader(fileName);

                        //System.IO.StreamWriter s = new System.IO.StreamWriter(fileName,Encoding.Unicode);



                        Attachment a = new Attachment(fileName);

                        // a.NameEncoding = Encoding.UTF32;

                        message.Attachments.Add(a);

                    }
                    #endregion

                    return message;
                }
                else
                    return null;

            }
            else
                return null;

        }

        public static MailMessage CreateMessagePhones(Vacancy vacancy, Candidate candidate)
        {
            if ((Business.currentUser.EMail != null) && (Business.currentUser.EMail != string.Empty) &&
                (vacancy.Employer.Employer_ContactPersons.Count > 0))
            {
                MailMessage message = new MailMessage();

                message.From = new System.Net.Mail.MailAddress(Business.currentUser.EMail);

                message.Subject = GetSubjectPhones(candidate);

                message.Body = GetBodyPhones(candidate);

                #region Create recipients

                if (vacancy.Candidate != null)
                    AddRecipientsToMessage(message, vacancy.Candidate);

                if (vacancy.Candidate1 != null)
                    AddRecipientsToMessage(message, vacancy.Candidate1);

                #endregion

                if (message.To.Count > 0)
                {
                    #region Add attchment

                    string fileName = string.Empty;

                    if ((candidate.Candidate_Resume != null) && (candidate.ResumeName != null))
                    {
                        fileName = string.Format("{0}\\{1}", Environment.CurrentDirectory, candidate.ResumeName);

                        System.IO.File.WriteAllBytes(fileName, candidate.Candidate_Resume.FirstOrDefault().Resume);

                        Attachment a = new Attachment(fileName);

                        message.Attachments.Add(a);

                    }
                    #endregion

                    return message;
                }
                else
                    return null;

            }
            else
                return null;

        }


        public static void DeleteFile(string fileName)
        {
            try
            {
                if (fileName != string.Empty)
                    if (System.IO.File.Exists(fileName))
                        System.IO.File.Delete(fileName);
            }
            catch
            {
            }
        }

    }
}
